/**
 ******************************************************************************
 * @file    ax_mpu6050.h
 * @author  Musk Han@XTARK
 * @brief   MPU6050操作头文件 - HAL库版本
 ******************************************************************************
 */

#ifndef __AX_MPU6050_H
#define __AX_MPU6050_H

#ifdef __cplusplus
extern "C" {
#endif

#include "i2c.h"
#include "main.h"

// MPU6050设备地址
#define MPU6050_ADDR (0x68 << 1)  // HAL库需要左移1位

// MPU6050寄存器定义
#define MPU6050_SAMPLE_RATE_REG 0x19
#define MPU6050_CFG_REG 0x1A
#define MPU6050_GYRO_CFG_REG 0x1B
#define MPU6050_ACCEL_CFG_REG 0x1C
#define MPU6050_FIFO_EN_REG 0x23
#define MPU6050_I2C_MST_CTRL_REG 0x24
#define MPU6050_INT_EN_REG 0x38
#define MPU6050_ACCEL_XOUTH_REG 0x3B
#define MPU6050_TEMP_OUTH_REG 0x41
#define MPU6050_GYRO_XOUTH_REG 0x43
#define MPU6050_PWR_MGMT1_REG 0x6B
#define MPU6050_PWR_MGMT2_REG 0x6C
#define MPU6050_WHO_AM_I_REG 0x75

// 加速度量程定义
#define ACC_RANGE_2G 0x00
#define ACC_RANGE_4G 0x01
#define ACC_RANGE_8G 0x02
#define ACC_RANGE_16G 0x03

// 陀螺仪量程定义
#define GYRO_RANGE_250 0x00
#define GYRO_RANGE_500 0x01
#define GYRO_RANGE_1000 0x02
#define GYRO_RANGE_2000 0x03

// 低通滤波器带宽定义
#define DLPF_ACC184_GYRO188 0x01
#define DLPF_ACC94_GYRO98 0x02
#define DLPF_ACC44_GYRO42 0x03
#define DLPF_ACC21_GYRO20 0x04
#define DLPF_ACC10_GYRO10 0x05
#define DLPF_ACC5_GYRO5 0x06

// 函数声明
void AX_MPU6050_Init(I2C_HandleTypeDef* hi2c);
void AX_MPU6050_SetAccRange(uint8_t range);
void AX_MPU6050_SetGyroRange(uint8_t range);
void AX_MPU6050_SetGyroSmplRate(uint16_t smplrate);
void AX_MPU6050_SetDLPF(uint8_t bandwidth);
float AX_MPU6050_GetTempValue(void);
void AX_MPU6050_GetAccData(int16_t* pbuf);
void AX_MPU6050_GetGyroData(int16_t* pbuf);
uint8_t AX_MPU6050_TestConnection(void);

#ifdef __cplusplus
}
#endif

#endif /* __AX_MPU6050_H */